In the computing community today, computer systems allow many resource users to share one or more resources. That is, a computing environment may include a plurality of resources (e.g., data storage resources, processing resources, etc.) that are capable of satisfying given demands of resource users (such as storage demands, processing demands, etc.), and the system may allocate any one or more of such plurality of resources for serving the demands of any given resource user. For example, a system may use the storage resources of one or more servers to satisfy storage demands of a resource user. Further, a plurality of resource users may desire resource capacity (e.g., storage capacity) at any given time, and the system may therefore determine how to allocate the resources across the resource users to satisfy the demands of the users. As a further example, a client user may, when logging onto a host system, be allocated to a certain portion of the system's resources for hosting the client's session (i.e., the period of time the client user is logged onto the system).
It should be recognized that “resource users” (or “resource consumers”), as used herein, are not limited to human users. Rather, resource users may refer to any entity which consumes capacity of a computing resource including, but not limited to, human users, hardware, software, processes, et cetera. Furthermore, “resources” (or “computing resources”), as used herein, are not limited to servers, but may refer to any limited-capacity resource that is capable of serving a computing demand of a resource consumer, such as processing demand, storage demand, communication/network access demand, and/or input/output (I/O) demand, as examples. Thus, examples of such resources include without limitation blade computers, personal computers, printers, data storage resources (e.g., databases, memory, hard disk, peripheral storage device, etc.), processing resources (e.g., central processing units (CPUs)), network interface resources, input/output resources, and/or any other computing resources.
While allowing resource users to share one or more resources has become commonplace, capacity of resources at any given time are limited, and therefore it becomes desirable to intelligently allocate the resource capacity among the demanding resource users in a manner that attempts to optimize the available capacity for serving the resource user demands. Various resource allocation schemes have been developed, which have primarily been concerned with attempting to allocate capacity of resources among the demands of the resource users. That is, traditional resource allocation schemes have primarily been concerned with managing the amount of capacity of each resource to allocate to users so as to, a) prevent one user from overtaking all resource capacity to the detriment of other users (i.e., fairly balance the available capacity allocated to the competing users), and/or b) avoid allocating a resource that is overloaded (i.e., capacity is fully consumed) for servicing a user's demands while other resources remain underutilized (to ensure that a resource user is not provided degraded service by an overloaded resource, while other resources are underutilized). Thus, much focus of traditional resource allocation schemes has been on managing the capacity (e.g., processing capacity, storage capacity, network bandwidth capacity, etc.) of resources in a manner that attempts to service the resource users' demands fairly.
Over the years, the desire to intelligently allocate resources has grown. One resource allocation scheme that has been developed is round-robin allocation, wherein resource users are allocated to resources in a round-robin fashion. For example, 100 processes may run on any of 20 blade computers, and dispersing the processes evenly among the blade computers (e.g. 5 processes per blade computer) may increase computing efficiency by, for example, preventing a single blade computer from running all 100 processes while the 19 other blade computers remain idle. In some instances, however, a strict round-robin scheme for allocating resource users to resources is ineffective because some resource users may demand more resource capacity than others. For example, if five of the most demanding resource users were assigned to one resource while five of the least demanding resource users were assigned to another resource, the resource to which the most demanding users are assigned may become overloaded, which may negatively impact the service provided to those users, while the resource to which the least demanding users are assigned may remain largely underutilized. Therefore, more complex allocation schemes have evolved for determining each resource user's demands for capacity and attempting to allocate resource capacity to users based on their respective demands, rather than based on a mere round-robin fashion.
As intelligent resource allocation has evolved, developers realized that different resources could be equipped with different features and/or may possess different capacity, and resource users could be assigned to a particular resource which best matches their need at a particular time. For instance, some resources possess high processing speed while other resources have superior graphics capabilities. As a result, allocation techniques developed for assigning a resource user requesting large processing capabilities to a resource with high processing speed and for assigning a resource user demanding graphics design to the superior graphics resource. Thus, users may be allocated to a resource based on the user's demand and the resource's operational capabilities. The evolution of resource allocation continued as systems known in the art also considered the respective workloads present on the resources when distributing resource users. For example, United States Patent Application Number 2005/0076043 to Blenedetti et al. entitled “WORKLOAD SCHEDULER WITH RESOURCE OPTIMIZATION FACTORING,” the disclosure of which is hereby incorporated herein, describes a workload scheduler which evaluates each work request in a queue to determine the resources each work request will utilize. Then, the scheduler schedules work requests which utilize diverse resources to run at the same time preventing a single resource from being overused at any one time. Thus, the allocation scheme attempts to optimize use of the resources' capacity for serving the demands of the resource users (work requests).
While intelligent allocation techniques have improved the efficiency of resource utilization, the computing community has traditionally focused on developing allocation schemes for managing utilization of resource capacity. That is, traditional resource allocation techniques have focused, almost exclusively, on managing utilization of resource capacity for serving demands of resource users. However such traditional resource allocation techniques have failed to manage resource allocation based on the respective power consumption of resource users. Even if prior allocation schemes optimize utilization of resource capacity for serving resource user demands, such schemes have failed to consider the resource users' respective power consumption in making the allocation, which may lead to undesirable affects, such as overheating and/or increased utility costs. Different resource users may utilize resources differently, thus resulting in different power consumption by the resources in serving the demands of the resource users. Thus, a desire exists for a system and method that enables a resource user's expected power consumption to be determined and used when allocating the resource user to a resource. In this manner, the expected power consumption of respective users can be distributed across resources in an intelligent/managed way to, for instance, better manage the impact of heating, utility costs, and/or other effects of power consumption.